package ua.edu.test;

import android.app.ActionBar;
import android.app.FragmentTransaction;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
import ua.edu.test.adapter.TabsPagerAdapter;
import ua.edu.test.db.DBWork;
import ua.edu.test.menu.AboutProgram;
import ua.edu.test.menu.BankInfoList;
import ua.edu.test.tab1actions.common.fragments.Actions;
import ua.edu.test.tab1actions.common.fragments.UserCards;
import ua.edu.test.tab1actions.unique.fragments.*;
import ua.edu.test.tab2mycards.AddCard;
import ua.edu.test.tab2mycards.MyCards;

import java.util.ArrayList;

public class MainActivity extends FragmentActivity implements ActionBar.TabListener {

	private static final String LOG_TAG = MainActivity.class.getName();



    private static   final int[] tabs = {R.string.action, R.string.my_cards};
	private ViewPager viewPager;
	private ActionBar actionBar;
	private TabsPagerAdapter tabsPagerAdapter;

	private ArrayList<Fragment> pageItemArrayList;

	private  Fragment tab1;
	private  Fragment tab2;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.pager);

		DBWork.initialized(getApplicationContext());



		tab1 = new Actions();
		tab2 = new MyCards();
		//создаем и заполняем все 2 таба при создании программы
		//=========================
		actionBar = getActionBar();
		actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

		pageItemArrayList = new ArrayList<Fragment>();
		pageItemArrayList.add( tab1 );
		pageItemArrayList.add( tab2 );

		tabsPagerAdapter = new TabsPagerAdapter(getSupportFragmentManager(), pageItemArrayList);
		tabsPagerAdapter.setPagerAllItems(pageItemArrayList);

		viewPager = (ViewPager)findViewById(R.id.pager);
		viewPager.setAdapter(tabsPagerAdapter);
		//=====================================

		//добавляем все табы на actionBar
		for (int tabName : tabs){
			actionBar.addTab(actionBar.newTab().setText(tabName).setTabListener(this));
		}

		viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
			@Override
			public void onPageSelected(int pos) {
				actionBar.setSelectedNavigationItem(pos);
			}

			@Override
			public void onPageScrolled(int pos, float v, int i2) {
			}

			@Override
			public void onPageScrollStateChanged(int i) {
			}
		});
	}


	@Override
	public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
		viewPager.setCurrentItem(tab.getPosition());
	}

	@Override
	public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
	}

	@Override
	public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
	}




	@Override
	public void onBackPressed() {
		showTab1Action();
		showTab2MyCards();
	}



//	===========================================
//					for Tab 1
//	===========================================

	// первое окно (общее) - действия
	public void showTab1Action(){
		loadFrToTab1(new Actions());
	}


	// второе окно (общее) - выбор карты
	public void showTab1UserCard(){
		loadFrToTab1(new UserCards());
	}


	//третье окно (уникальное) - переход на выбранное действие
	public void showTab1SelUniqueFr(String action){
		if (action.equals(AllActions.BALANCE)){
			loadFrToTab1(new Balance());
		} else if ( action.equals(AllActions.REPLENISH_MOB_TEL) ){
			loadFrToTab1(new ReplenishMobTel());
		}
	}

	public void showTab1AddCard(){
		loadFrToTab1(new AddCard());
	}

//	===========================================
//					for Tab 2
//	===========================================

	// основное окно во втором табе
	public void showTab2MyCards(){
		loadFrToTab2(new MyCards());
	}

	// позволяет добавить новую карту
	public void showTab2AddCard(){
		loadFrToTab2(new AddCard());
	}

//	============================================

//	public static final String TAB_1 = "0";

	private void loadFrToTab1(Fragment t1){
		tab1 = t1;
		exeTabs(0);
	}

	private void loadFrToTab2(Fragment t2){
		tab2 = t2;
		exeTabs(1);
	}


	private void exeTabs(int tabNumber){
		pageItemArrayList = new ArrayList<Fragment>();
		Log.d(LOG_TAG, "TAB 1 = " + tab1);
		Log.d(LOG_TAG, "TAB 2 = " + tab2);
		pageItemArrayList.add(tab1);
		pageItemArrayList.add(tab2);

		tabsPagerAdapter.setPagerItem(pageItemArrayList, tabNumber);

		ViewPager viewPager1 = (ViewPager) findViewById(R.id.pager);
		viewPager1.setAdapter(tabsPagerAdapter);

		actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
		actionBar.getTabAt(1);
	}








	/**
	 * В этом методе производится выбор
	 * телефонного номера из доступных контактов
	 * @return String - выбранный номер телефона из книги контактов
	 */
	public String getSelectedPhoneBookContact(){
		return "+380551234511";
	}

	/**
	 * В этом методе возвращается номер телефона, пользователя
	 * @return String - собственный номер телефона пользователя (из sim карты)
	 */
	public String getMyTelNumber(){
		return "0961234567";
	}



	/**
	 * Производит пополнение моб тел (запуск сервиса и т.д.)
	 * @param context
	 * @param state
	 */
	public void goReplMobTel(Context context, boolean state){
		if (state){
			Toast.makeText(context, "Пополнение телефона выполнено успешно !", Toast.LENGTH_SHORT).show();
		}else {
			Toast.makeText(context, "Действие отменено", Toast.LENGTH_SHORT).show();
		}
	}

	public void goReplMobTel(boolean state){
		if (state){
			Toast.makeText(getApplicationContext(), "Пополнение телефона выполнено успешно !", Toast.LENGTH_SHORT).show();
		}else {
			Toast.makeText(getApplicationContext(), "Действие отменено", Toast.LENGTH_SHORT).show();
		}
	}


	/**
	 * Заполнение элементов меню при старте программы
	 * @param menu
	 * @return
	 */
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.menu, menu);
		return true;

	}

	/**
	 * Обработка выбранного пункта меню
	 * @param item
	 * @return
	 */
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()){
			case R.id.menu_settings:
				Log.d(LOG_TAG, "selected menu_settings");
				return true;
			case R.id.menu_banks_informs:
				Log.d(LOG_TAG, "selected menu_banks_informs");
                startActivity(new Intent(this, BankInfoList.class));
				return true;
			case R.id.menu_about_program:
				startActivity(new Intent(this, AboutProgram.class));
				return true;
			default:
				return super.onOptionsItemSelected(item);
		}
	}


}
